﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;
using AutomationTools.Procedimentos.Exceptions;

namespace AutomationTools.Procedimentos.Acao.EMail
{
    public class EnviarEmail : IProcedimento
    {
        string para;
        string titulo;
        EnviarEmailConfiguracao config;

        public EnviarEmail(string para, string titulo, EnviarEmailConfiguracao config)
        {
            this.para = para;
            this.titulo = titulo;
            this.config = config;
        }


        public object Executar(IContexto contexto)
        {
            MailMessage message = new MailMessage(config.From, para, titulo, contexto.Parametro.ToString());
            message.From = new MailAddress(config.From, config.DisplayFrom, Encoding.GetEncoding("iso-8859-1"));
            message.SubjectEncoding = Encoding.GetEncoding("iso-8859-1");
            message.IsBodyHtml = true;
            config.ObterSmtpClient().Send(message);

            return contexto.Parametro;
        }

        public void ValidarEntrada(IContexto contexto)
        {
            if (!(contexto.Parametro is String))
                throw new ParametroException(typeof(String), contexto.Parametro.GetType());
        }
    }

    public class EnviarEmailConfiguracao
    {
        public EnviarEmailConfiguracao(string SMTPHost, string usuario, string senha, string from, string displayFrom)
        {
            this.SMTPHost = SMTPHost;
            this.Usuario = usuario;
            this.Senha = senha;
            this.From = from;
            this.DisplayFrom = displayFrom;
        }

        public string SMTPHost { get; set; }
        public string Usuario { get; set; }
        public string Senha { get; set; }
        public string From { get; set; }
        public string DisplayFrom { get; set; }

        public SmtpClient ObterSmtpClient()
        {
            SmtpClient ret = new SmtpClient();
            ret.Credentials = new NetworkCredential(Usuario, Senha);
            ret.Host = SMTPHost;
            return ret;
        }
    }
}
